Many microprocessors, microcontrollers, systems-on-a-chip (SOC), and other general-purpose execution devices include embedded firmware. This embedded firmware has an advantage over non-embedded firmware in that it can be more area-efficient and can enable the execution device to be self-contained. It is desirable to have firmware ready at power-up to avoid a delay incurred by reading-in the programming from off-chip storage. To meet this need, the firmware has traditionally been implemented as a ROM (read-only memory).
The most area-efficient ROMs lack flexibility, as they are hard-wired. Although reprogrammable ROMs may be used, they are considerably less area-efficient and require special VLSI (very large-scale integrated circuit) manufacturing processes, thereby incurring additional costs. Another approach uses a RAM (random-access memory) to enable reprogramming. However, RAM does not enable firmware to be pre-programmed. Instead, a program has to be loaded into the RAM from an external source.